package com.ktgj.hotel.service;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

import com.ktgj.common.core.domain.R;
import com.ktgj.customer.api.domain.BankCard;
import com.ktgj.customer.api.domain.CustomerTraveler;
import com.ktgj.hotel.domain.DicSubwayStation;
import com.ktgj.hotel.domain.HotelCashier;
import com.ktgj.hotel.domain.HotelOrder;
import com.ktgj.hotel.domain.base.HotelDetailInput;
import com.ktgj.hotel.domain.base.HotelDetailOutput;
import com.ktgj.hotel.domain.base.HotelInput;
import com.ktgj.hotel.domain.base.HotelOutput;
import com.ktgj.hotel.domain.common.Hotels;
import com.ktgj.hotel.domain.elong.*;
import com.ktgj.hotel.domain.rooms.*;
import com.ktgj.hotel.domain.rooms.HotelDetails;
import com.ktgj.hotel.domain.rooms.HotelDetailsList;
import com.ktgj.hotel.domain.rooms.OrderHotelInput;
import com.ktgj.hotel.domain.rooms.OrderHotelOutput;
import com.ktgj.hotel.domain.vo.*;
import com.ktgj.pay.api.domain.YeeBaoResultApi;
import org.apache.ibatis.annotations.Param;

import javax.servlet.http.HttpServletRequest;

/**
 * 酒店Service接口
 * 
 * @author ruoyi
 * @date 2021-11-22
 */
public interface IHotelService {
//    /**
//     * 查询酒店
//     *
//     * @param id 酒店ID
//     * @return 酒店
//     */
//    public Hotels selectHotelById(Long id);
//
//    /**
//     * 查询酒店列表
//     *
//     * @param hotel 酒店
//     * @return 酒店集合
//     */
//    public List<Hotels> selectHotelList(Hotels hotel);
//
//    /**
//     * 新增酒店
//     *
//     * @param hotel 酒店
//     * @return 结果
//     */
//    public int insertHotel(Hotels hotel);
//
//    /**
//     * 修改酒店
//     *
//     * @param hotel 酒店
//     * @return 结果
//     */
//    public int updateHotel(Hotels hotel);
//
//    /**
//     * 批量删除酒店
//     *
//     * @param ids 需要删除的酒店ID
//     * @return 结果
//     */
//    public int deleteHotelByIds(Long[] ids);
//
//    /**
//     * 删除酒店信息
//     *
//     * @param id 酒店ID
//     * @return 结果
//     */
//    public int deleteHotelById(Long id);

    /**
     * 根据条件查询酒店列表
     * @param input
     * @return
     */
    List<HotelOutput> selectHotelLists(HotelInput input);


    /**
     * 查询酒店房型信息
     * @param input
     * @return
     */
    HotelDetails queryByIdHotelDetail(HotelDetailInput input) throws Exception;

    /**
     * 后台查询酒店房型信息
     */
    DetailsVo backByIdHotelDetail(HotelDetailInput input) throws Exception;

    /**
     * 查询酒店房型信息详情
     * @param input
     * @return
     */
    HotelDetailsList queryByIdHotelDetailsList(HotelDetailInput input) throws Exception;

    /**
     * 酒店房型页图片集合
     * @param input
     * @return
     */
    HotelRoomImagesResponse hotelRoomImages(HotelDetailInput input) throws Exception;

    /**
     * 酒店房型页酒店信息
     * @param input
     * @return
     */
    HotelRoomInfoResponse hotelRoomInfo(HotelDetailInput input) throws Exception;

    /**
     * 订单预定页-预定须知
     * @param input
     * @return
     */
    BookingInfo queryBooking(HotelDetailInput input) throws Exception;

    /**
     * 填写订单
     * @param token
     * @param input
     * @return
     */
    OrderHotelOutput orderHotel(String token, OrderHotelInput input);

    /**
     * 酒店支付
     * */
    public Map<String, Object> hotelPays(Long orderNumber, String openId, HttpServletRequest request, BigDecimal amount, String type) throws Exception;

    /**
     * 后台酒店付款
     * */
//    public String payment() throws Exception;

    public CreateOrderResult createOrder(String token, HttpServletRequest request, Long bankCardId, Long orderId, Long customerId, BankCard bankCard) throws Exception;

    public CreateOrderResult bankCreateOrder(Long orderId, String backNum) throws Exception;
    /**
     * 酒店收银台
     * @param token
     * @param orderId
     * @return
     */
    public HotelCashier payOrder(String token, Long orderId, HttpServletRequest request) throws Exception;

    /**
     * 国内酒店-订单列表
     * @param
     * @return
     */
    public OrderList orderList(String token, String type) throws Exception;


    /**
     * 国内酒店-删除订单
     * @param removeOrder
     * @return
     */
    public int deleteOrder(RemoveOrder removeOrder);

    /**
     * 国内酒店-取消订单
     * @param condition
     * @return
     */
    public CancelOrderResult cancelOrder(CancelOrderCondition condition);

    /**
     * 国内酒店-订单取消
     * */
    public CancelOrderResult hotelOrderCancel(CancelOrderCondition condition, HttpServletRequest request) throws Exception;

    /**
     * 订单明细
     * */
    public Map<String, Object> orderDetails(Long orderid, Long orderNum) throws Exception;

    /**
     * 会员常用旅客信息列表
     * */
    public List<CustomerTraveler> CustomerTraveler(Long memberId);

    /**
     * 查询酒店图片
     * */
    public List<HotelPicPathVo> selectPicPath(OrderHotelInput input) throws Exception;

    /**
     * 酒店图片
     * */
    public List<HotelPicPathVo> hotelPicture(OrderHotelInput input) throws Exception;

    /**
     * 酒店相册详情
     * */
    public List<PicPathVo> selectPicPathVo(OrderHotelInput input) throws Exception;

    /**
     * 查询酒店列表
     * */
    public TotalVo dataStitching(HotelInput hotelInput) throws Exception;

    /**
     * 条件查询酒店列表(自营)
     * */
    public TotalVo stitching(HotelInput hotelInput) throws Exception;

    /**
     * 酒单创建订单（数据库）
     * */
    public HotelIdNumVo order(String token, CreateHotelOrder condition, Long customerId, HotelDetailOutput hotelDetailOutput) throws Exception;

    /**
     * 酒店创建订单（艳东版）
     * */
    public HotelIdNumVo hotelSelOrder(String token, CreateOrderVo condition, Long customerId) throws Exception;

    /**
     * 酒店价格查询
     * */
    public BigDecimal hotelPrice(HotelDetailInput input) throws Exception;

    /**
     * 酒店取消政策
     * */
    public CancellationPolicy cancellationPolicy(HotelDetailInput input) throws Exception;

    /**
     * 特惠酒店
     * */
    public List<SpecialHotelVo> specialHotel(SpecialHotel specialHotel) throws Exception;

    /**
     * 酒店房型筛选
     * */
    public HotelDetails hotelRoomScreening(RoomTypeVo roomTypeVo) throws Exception;

    /**
     * 热门酒店
     * */
    public List<PopularHotel> hotelPopular() throws Exception;

    /**
     * 酒店取消订单
     * */
    public int updateHotelOrder(String token, Long orderId) throws Exception;

    /**
     * 查询酒店列表
     * */
    public List<HotelVo> hotelsList(BackHotelVo backHotelVo) throws Exception;

    /**
     * 根据拼音查询酒店名称queryByIdHotelDetail
     * */
    public List<HotelPinYinVo> selectHotelVoByPinYin(String pinYin, String cityName) throws Exception;

    /**
     * 根据经纬度查询周边酒店
     * */
    public List<ParameterHotelVo> selectHotelVoLngAndLat(String lng, String lat) throws Exception;

    /**
     * 查询酒店周边交通
     * */
    public List<HotelTransportationVo> selectTrafficAround(String lng, String lat) throws Exception;

    /**
     * 查询酒店周边景点
     * */
    public List<AttractionsVo> selectAttractions(String lng, String lat) throws Exception;

    /**
     * 酒店订单详情
     * */
    public HotelOrderDetailsVo selectHotelOrderDetails(Long orderId) throws Exception;

    /**
     * 条件查询酒店订单列表
     * */
    public HotelOrderPaginationVo conditionHotelOrder(HotelParameterVo hotelParameterVo) throws Exception;

    /**
     * 会员订单列表
     * */
    public List<BackHotelOrderVo> selectHotelOrderByCustomerId(Long customerId) throws Exception;

    /**
     * 酒店无卡无密支付
     * */
    public String hotelPay(HotelPayVo hotelPayVo, HttpServletRequest request) throws Exception;

    /**
     * 酒店支付宝支付
     * */
    public String aliPayCallback(BigDecimal money, String orderNumber, HttpServletRequest request, BigDecimal amount, String type) throws Exception;

    /**
     * 酒店银联支付
     * */
    public String unionPayCallback(String orderIdParam, BigDecimal priceParam, HttpServletRequest request, BigDecimal amount, String type) throws Exception;

    /**
     * 酒店介绍(新)
     * @param hotelId
     * @return
     */
    HotelHomeDetailInfo queryHotelDetail(String hotelId) throws Exception;

    /**
     * 获取艺龙订单详情
     * */
    public HotelDetailOutput orderDetails(Long id) throws Exception;

    /**
     * 查询待填写订单
     * */
    public SelInterfaceVo selInterface(HotelDetailInput input) throws Exception;

    /**
     * 推荐等级列表
     * */
    public List<Long> recommendLevel();

    /**
     * 关键字不全
     * */
    public List<Destination> destination(String name);
}
